package cn.iocoder.yudao.module.erp.service.dp;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.dispatchvehicle.vo.DispatchVehicleSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpwlmq.vo.DpWlmqPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpwlmq.vo.DpWlmqSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpyw.vo.DpYwPageReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dispatchvehicle.DispatchVehicleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpWlmqDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpYwDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemWlmqDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpEastListWlmqDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpWestListWlmqDO;

import javax.validation.*;
import java.util.List;

/**
 * ERP乌鲁木齐制单 Service 接口
 * @author 天使管理员
 */
public interface DpWlmqService {

    /**
     * 创建ERP乌鲁木齐制单
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createDpWlmq(@Valid DpWlmqSaveReqVO createReqVO);

    /**
     * ERP乌鲁木齐运单配车
     * @param dispatchNumber
     * @param createReqVO
     * @return
     */
//    Boolean configCar(String dispatchNumber, List<DispatchorderitemWlmqSaveReqVO> createReqVO);

    /**
     * 更新ERP乌鲁木齐制单
     * @param updateReqVO 更新信息
     */
    void updateDpWlmq(@Valid DpWlmqSaveReqVO updateReqVO);

    /**
     * 删除ERP乌鲁木齐制单
     * @param id 编号
     */
    void deleteDpWlmq(String id);

    /**
     * 获得ERP乌鲁木齐制单
     * @param id 编号
     * @return ERP乌鲁木齐制单
     */
    DpWlmqDO getDpWlmq(String id);

    /**
     * 获得ERP乌鲁木齐制单分页
     * @param pageReqVO 分页查询
     * @return ERP乌鲁木齐制单分页
     */
    PageResult<DpWlmqDO> getDpWlmqPage(DpWlmqPageReqVO pageReqVO);

    /**
     * 获得ERP乌鲁木齐制单出库列表
     * @param pageReqVO
     * @return
     */
    PageResult<DpWlmqDO> dpWlmqOuterList(DpWlmqPageReqVO pageReqVO);

    /**
     * ERP乌鲁木齐制单配车出库
     * @param createReqVO
     */
    void dpWlmqOutStroe(DispatchVehicleSaveReqVO createReqVO);

    /**
     * 获得ERP乌鲁木齐制单入库列表
     * @param dispatchNumber
     * @return
     */
    List<DispatchVehicleDO> dpWlmqEnterList(String dispatchNumber, Integer line, Integer inventoryStatus, Integer dest,String dpId);

    /**
     * ERP乌鲁木齐运单入库
     * @param createReqVO
     */
    void enterStroeDpWlmq(List<DispatchVehicleSaveReqVO> createReqVO);

    // ==================== 子表（ERP乌鲁木齐制单货号详情） ====================

    /**
     * 获得ERP乌鲁木齐制单货号详情列表
     * @param no 运单号
     * @return ERP乌鲁木齐制单货号详情列表
     */
    List<DpItemWlmqDO> getDpItemWlmqListByNo(String no);

    // ==================== 子表（乌鲁木齐东线清单） ====================

    /**
     * 获得乌鲁木齐东线清单列表
     * @param no 运单号
     * @return 乌鲁木齐东线清单列表
     */
    List<DpEastListWlmqDO> getDpEastListWlmqListByNo(String no);

    // ==================== 子表（乌鲁木齐西线清单） ====================

    /**
     * 获得乌鲁木齐西线清单列表
     * @param no 运单号
     * @return 乌鲁木齐西线清单列表
     */
    List<DpWestListWlmqDO> getDpWestListWlmqListByNo(String no);

    /**
     * ERP物流乌鲁木齐制单审核
     * @param dpWlmqDO
     */
    void examineDpWlmq(DpWlmqDO dpWlmqDO);

}